package com.servlet.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Title: ServletLeaf
 * @Description:
 * @Auther: py
 * @Version: 1.0
 * @create 2023/12/21 13:30
 * 通过service的生命周期得到结论：
 *   1. servlet 一旦加载  一个项目中只创建一个实例 servlet 是单例模式  【初始化的数据可以被多用户共享】
 *   2. servlet 是可以被多用户访问  是一个多线程的
 *   3. 单例多线程 引发什么问题？
 *        共享数据不同步的问题
 *        如何解决添加线程锁
 *   4. servlet 什么时候创建的
 *      4.1 默认  请求第一次访问  实例就创建了
 *      4.2 项目一启动 servlet实例就会创建  loadOnStartup 数值越小 优先级越高
 *
 *      loadOnStartup 配置了： 启动的时候会慢点一点  以后访问就很快
 *      loadOnStartup 不配置： 启动的速度会快 第一次访问可能会慢一点
 *
 */
@WebServlet(value = "/leaf",loadOnStartup = 1)
public class ServletLeaf extends HttpServlet {

    public ServletLeaf() {
        System.out.println("1. ServletLeaf()......");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("2. 初始化方法.....");
    }

    // 拦截所有的请求。。  去选择调用 doGet/doPost/doPut/doDelete
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("3. service.....");
        //
        String method = req.getMethod();
        if(method.equals("GET")) {
            doGet(req,resp);
        }else if(method.equals("POST")) {
            doPost(req,resp);
        }

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    public void destroy() {
        System.out.println("销毁。。。。。");
    }
}
